//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension WellArchitected {
    // MARK: Enums

    public enum DifferenceStatus: String, CustomStringConvertible, Codable {
        case deleted = "DELETED"
        case new = "NEW"
        case updated = "UPDATED"
        public var description: String { return self.rawValue }
    }

    public enum LensStatus: String, CustomStringConvertible, Codable {
        case current = "CURRENT"
        case deprecated = "DEPRECATED"
        case notCurrent = "NOT_CURRENT"
        public var description: String { return self.rawValue }
    }

    public enum NotificationType: String, CustomStringConvertible, Codable {
        case lensVersionDeprecated = "LENS_VERSION_DEPRECATED"
        case lensVersionUpgraded = "LENS_VERSION_UPGRADED"
        public var description: String { return self.rawValue }
    }

    public enum PermissionType: String, CustomStringConvertible, Codable {
        case contributor = "CONTRIBUTOR"
        case readonly = "READONLY"
        public var description: String { return self.rawValue }
    }

    public enum Risk: String, CustomStringConvertible, Codable {
        case high = "HIGH"
        case medium = "MEDIUM"
        case none = "NONE"
        case notApplicable = "NOT_APPLICABLE"
        case unanswered = "UNANSWERED"
        public var description: String { return self.rawValue }
    }

    public enum ShareInvitationAction: String, CustomStringConvertible, Codable {
        case accept = "ACCEPT"
        case reject = "REJECT"
        public var description: String { return self.rawValue }
    }

    public enum ShareStatus: String, CustomStringConvertible, Codable {
        case accepted = "ACCEPTED"
        case expired = "EXPIRED"
        case pending = "PENDING"
        case rejected = "REJECTED"
        case revoked = "REVOKED"
        public var description: String { return self.rawValue }
    }

    public enum WorkloadEnvironment: String, CustomStringConvertible, Codable {
        case preproduction = "PREPRODUCTION"
        case production = "PRODUCTION"
        public var description: String { return self.rawValue }
    }

    public enum WorkloadImprovementStatus: String, CustomStringConvertible, Codable {
        case complete = "COMPLETE"
        case inProgress = "IN_PROGRESS"
        case notApplicable = "NOT_APPLICABLE"
        case notStarted = "NOT_STARTED"
        case riskAcknowledged = "RISK_ACKNOWLEDGED"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct Answer: AWSDecodableShape {
        public let choices: [Choice]?
        public let helpfulResourceUrl: String?
        public let improvementPlanUrl: String?
        public let isApplicable: Bool?
        public let notes: String?
        public let pillarId: String?
        public let questionDescription: String?
        public let questionId: String?
        public let questionTitle: String?
        public let risk: Risk?
        public let selectedChoices: [String]?

        public init(choices: [Choice]? = nil, helpfulResourceUrl: String? = nil, improvementPlanUrl: String? = nil, isApplicable: Bool? = nil, notes: String? = nil, pillarId: String? = nil, questionDescription: String? = nil, questionId: String? = nil, questionTitle: String? = nil, risk: Risk? = nil, selectedChoices: [String]? = nil) {
            self.choices = choices
            self.helpfulResourceUrl = helpfulResourceUrl
            self.improvementPlanUrl = improvementPlanUrl
            self.isApplicable = isApplicable
            self.notes = notes
            self.pillarId = pillarId
            self.questionDescription = questionDescription
            self.questionId = questionId
            self.questionTitle = questionTitle
            self.risk = risk
            self.selectedChoices = selectedChoices
        }

        private enum CodingKeys: String, CodingKey {
            case choices = "Choices"
            case helpfulResourceUrl = "HelpfulResourceUrl"
            case improvementPlanUrl = "ImprovementPlanUrl"
            case isApplicable = "IsApplicable"
            case notes = "Notes"
            case pillarId = "PillarId"
            case questionDescription = "QuestionDescription"
            case questionId = "QuestionId"
            case questionTitle = "QuestionTitle"
            case risk = "Risk"
            case selectedChoices = "SelectedChoices"
        }
    }

    public struct AnswerSummary: AWSDecodableShape {
        public let choices: [Choice]?
        public let isApplicable: Bool?
        public let pillarId: String?
        public let questionId: String?
        public let questionTitle: String?
        public let risk: Risk?
        public let selectedChoices: [String]?

        public init(choices: [Choice]? = nil, isApplicable: Bool? = nil, pillarId: String? = nil, questionId: String? = nil, questionTitle: String? = nil, risk: Risk? = nil, selectedChoices: [String]? = nil) {
            self.choices = choices
            self.isApplicable = isApplicable
            self.pillarId = pillarId
            self.questionId = questionId
            self.questionTitle = questionTitle
            self.risk = risk
            self.selectedChoices = selectedChoices
        }

        private enum CodingKeys: String, CodingKey {
            case choices = "Choices"
            case isApplicable = "IsApplicable"
            case pillarId = "PillarId"
            case questionId = "QuestionId"
            case questionTitle = "QuestionTitle"
            case risk = "Risk"
            case selectedChoices = "SelectedChoices"
        }
    }

    public struct AssociateLensesInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAliases: [String]
        public let workloadId: String

        public init(lensAliases: [String], workloadId: String) {
            self.lensAliases = lensAliases
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.lensAliases.forEach {
                try validate($0, name: "lensAliases[]", parent: name, max: 64)
                try validate($0, name: "lensAliases[]", parent: name, min: 1)
            }
            try self.validate(self.lensAliases, name: "lensAliases", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case lensAliases = "LensAliases"
        }
    }

    public struct Choice: AWSDecodableShape {
        public let choiceId: String?
        public let description: String?
        public let title: String?

        public init(choiceId: String? = nil, description: String? = nil, title: String? = nil) {
            self.choiceId = choiceId
            self.description = description
            self.title = title
        }

        private enum CodingKeys: String, CodingKey {
            case choiceId = "ChoiceId"
            case description = "Description"
            case title = "Title"
        }
    }

    public struct CreateMilestoneInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let clientRequestToken: String
        public let milestoneName: String
        public let workloadId: String

        public init(clientRequestToken: String = CreateMilestoneInput.idempotencyToken(), milestoneName: String, workloadId: String) {
            self.clientRequestToken = clientRequestToken
            self.milestoneName = milestoneName
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.milestoneName, name: "milestoneName", parent: name, max: 100)
            try self.validate(self.milestoneName, name: "milestoneName", parent: name, min: 3)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case milestoneName = "MilestoneName"
        }
    }

    public struct CreateMilestoneOutput: AWSDecodableShape {
        public let milestoneNumber: Int?
        public let workloadId: String?

        public init(milestoneNumber: Int? = nil, workloadId: String? = nil) {
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case milestoneNumber = "MilestoneNumber"
            case workloadId = "WorkloadId"
        }
    }

    public struct CreateWorkloadInput: AWSEncodableShape {
        public let accountIds: [String]?
        public let architecturalDesign: String?
        public let awsRegions: [String]?
        public let clientRequestToken: String
        public let description: String
        public let environment: WorkloadEnvironment
        public let industry: String?
        public let industryType: String?
        public let lenses: [String]
        public let nonAwsRegions: [String]?
        public let notes: String?
        public let pillarPriorities: [String]?
        public let reviewOwner: String
        public let workloadName: String

        public init(accountIds: [String]? = nil, architecturalDesign: String? = nil, awsRegions: [String]? = nil, clientRequestToken: String = CreateWorkloadInput.idempotencyToken(), description: String, environment: WorkloadEnvironment, industry: String? = nil, industryType: String? = nil, lenses: [String], nonAwsRegions: [String]? = nil, notes: String? = nil, pillarPriorities: [String]? = nil, reviewOwner: String, workloadName: String) {
            self.accountIds = accountIds
            self.architecturalDesign = architecturalDesign
            self.awsRegions = awsRegions
            self.clientRequestToken = clientRequestToken
            self.description = description
            self.environment = environment
            self.industry = industry
            self.industryType = industryType
            self.lenses = lenses
            self.nonAwsRegions = nonAwsRegions
            self.notes = notes
            self.pillarPriorities = pillarPriorities
            self.reviewOwner = reviewOwner
            self.workloadName = workloadName
        }

        public func validate(name: String) throws {
            try self.accountIds?.forEach {
                try validate($0, name: "accountIds[]", parent: name, pattern: "[0-9]{12}")
            }
            try self.validate(self.accountIds, name: "accountIds", parent: name, max: 100)
            try self.validate(self.architecturalDesign, name: "architecturalDesign", parent: name, max: 2048)
            try self.awsRegions?.forEach {
                try validate($0, name: "awsRegions[]", parent: name, max: 100)
            }
            try self.validate(self.awsRegions, name: "awsRegions", parent: name, max: 50)
            try self.validate(self.description, name: "description", parent: name, max: 250)
            try self.validate(self.description, name: "description", parent: name, min: 3)
            try self.validate(self.industry, name: "industry", parent: name, max: 100)
            try self.validate(self.industryType, name: "industryType", parent: name, max: 100)
            try self.lenses.forEach {
                try validate($0, name: "lenses[]", parent: name, max: 64)
                try validate($0, name: "lenses[]", parent: name, min: 1)
            }
            try self.nonAwsRegions?.forEach {
                try validate($0, name: "nonAwsRegions[]", parent: name, max: 25)
                try validate($0, name: "nonAwsRegions[]", parent: name, min: 3)
            }
            try self.validate(self.nonAwsRegions, name: "nonAwsRegions", parent: name, max: 5)
            try self.validate(self.notes, name: "notes", parent: name, max: 2084)
            try self.pillarPriorities?.forEach {
                try validate($0, name: "pillarPriorities[]", parent: name, max: 64)
                try validate($0, name: "pillarPriorities[]", parent: name, min: 1)
            }
            try self.validate(self.reviewOwner, name: "reviewOwner", parent: name, max: 255)
            try self.validate(self.reviewOwner, name: "reviewOwner", parent: name, min: 3)
            try self.validate(self.workloadName, name: "workloadName", parent: name, max: 100)
            try self.validate(self.workloadName, name: "workloadName", parent: name, min: 3)
        }

        private enum CodingKeys: String, CodingKey {
            case accountIds = "AccountIds"
            case architecturalDesign = "ArchitecturalDesign"
            case awsRegions = "AwsRegions"
            case clientRequestToken = "ClientRequestToken"
            case description = "Description"
            case environment = "Environment"
            case industry = "Industry"
            case industryType = "IndustryType"
            case lenses = "Lenses"
            case nonAwsRegions = "NonAwsRegions"
            case notes = "Notes"
            case pillarPriorities = "PillarPriorities"
            case reviewOwner = "ReviewOwner"
            case workloadName = "WorkloadName"
        }
    }

    public struct CreateWorkloadOutput: AWSDecodableShape {
        public let workloadArn: String?
        public let workloadId: String?

        public init(workloadArn: String? = nil, workloadId: String? = nil) {
            self.workloadArn = workloadArn
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case workloadArn = "WorkloadArn"
            case workloadId = "WorkloadId"
        }
    }

    public struct CreateWorkloadShareInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let clientRequestToken: String
        public let permissionType: PermissionType
        public let sharedWith: String
        public let workloadId: String

        public init(clientRequestToken: String = CreateWorkloadShareInput.idempotencyToken(), permissionType: PermissionType, sharedWith: String, workloadId: String) {
            self.clientRequestToken = clientRequestToken
            self.permissionType = permissionType
            self.sharedWith = sharedWith
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.sharedWith, name: "sharedWith", parent: name, max: 2048)
            try self.validate(self.sharedWith, name: "sharedWith", parent: name, min: 12)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case permissionType = "PermissionType"
            case sharedWith = "SharedWith"
        }
    }

    public struct CreateWorkloadShareOutput: AWSDecodableShape {
        public let shareId: String?
        public let workloadId: String?

        public init(shareId: String? = nil, workloadId: String? = nil) {
            self.shareId = shareId
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case shareId = "ShareId"
            case workloadId = "WorkloadId"
        }
    }

    public struct DeleteWorkloadInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "clientRequestToken", location: .querystring(locationName: "ClientRequestToken")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let clientRequestToken: String
        public let workloadId: String

        public init(clientRequestToken: String = DeleteWorkloadInput.idempotencyToken(), workloadId: String) {
            self.clientRequestToken = clientRequestToken
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteWorkloadShareInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "clientRequestToken", location: .querystring(locationName: "ClientRequestToken")),
            AWSMemberEncoding(label: "shareId", location: .uri(locationName: "ShareId")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let clientRequestToken: String
        public let shareId: String
        public let workloadId: String

        public init(clientRequestToken: String = DeleteWorkloadShareInput.idempotencyToken(), shareId: String, workloadId: String) {
            self.clientRequestToken = clientRequestToken
            self.shareId = shareId
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.shareId, name: "shareId", parent: name, pattern: "[0-9a-f]{32}")
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociateLensesInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAliases: [String]
        public let workloadId: String

        public init(lensAliases: [String], workloadId: String) {
            self.lensAliases = lensAliases
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.lensAliases.forEach {
                try validate($0, name: "lensAliases[]", parent: name, max: 64)
                try validate($0, name: "lensAliases[]", parent: name, min: 1)
            }
            try self.validate(self.lensAliases, name: "lensAliases", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case lensAliases = "LensAliases"
        }
    }

    public struct GetAnswerInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "milestoneNumber", location: .querystring(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "questionId", location: .uri(locationName: "QuestionId")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAlias: String
        public let milestoneNumber: Int?
        public let questionId: String
        public let workloadId: String

        public init(lensAlias: String, milestoneNumber: Int? = nil, questionId: String, workloadId: String) {
            self.lensAlias = lensAlias
            self.milestoneNumber = milestoneNumber
            self.questionId = questionId
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.questionId, name: "questionId", parent: name, max: 128)
            try self.validate(self.questionId, name: "questionId", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAnswerOutput: AWSDecodableShape {
        public let answer: Answer?
        public let lensAlias: String?
        public let milestoneNumber: Int?
        public let workloadId: String?

        public init(answer: Answer? = nil, lensAlias: String? = nil, milestoneNumber: Int? = nil, workloadId: String? = nil) {
            self.answer = answer
            self.lensAlias = lensAlias
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case answer = "Answer"
            case lensAlias = "LensAlias"
            case milestoneNumber = "MilestoneNumber"
            case workloadId = "WorkloadId"
        }
    }

    public struct GetLensReviewInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "milestoneNumber", location: .querystring(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAlias: String
        public let milestoneNumber: Int?
        public let workloadId: String

        public init(lensAlias: String, milestoneNumber: Int? = nil, workloadId: String) {
            self.lensAlias = lensAlias
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetLensReviewOutput: AWSDecodableShape {
        public let lensReview: LensReview?
        public let milestoneNumber: Int?
        public let workloadId: String?

        public init(lensReview: LensReview? = nil, milestoneNumber: Int? = nil, workloadId: String? = nil) {
            self.lensReview = lensReview
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case lensReview = "LensReview"
            case milestoneNumber = "MilestoneNumber"
            case workloadId = "WorkloadId"
        }
    }

    public struct GetLensReviewReportInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "milestoneNumber", location: .querystring(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAlias: String
        public let milestoneNumber: Int?
        public let workloadId: String

        public init(lensAlias: String, milestoneNumber: Int? = nil, workloadId: String) {
            self.lensAlias = lensAlias
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetLensReviewReportOutput: AWSDecodableShape {
        public let lensReviewReport: LensReviewReport?
        public let milestoneNumber: Int?
        public let workloadId: String?

        public init(lensReviewReport: LensReviewReport? = nil, milestoneNumber: Int? = nil, workloadId: String? = nil) {
            self.lensReviewReport = lensReviewReport
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case lensReviewReport = "LensReviewReport"
            case milestoneNumber = "MilestoneNumber"
            case workloadId = "WorkloadId"
        }
    }

    public struct GetLensVersionDifferenceInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "baseLensVersion", location: .querystring(locationName: "BaseLensVersion")),
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias"))
        ]

        /// The base version of the lens.
        public let baseLensVersion: String
        public let lensAlias: String

        public init(baseLensVersion: String, lensAlias: String) {
            self.baseLensVersion = baseLensVersion
            self.lensAlias = lensAlias
        }

        public func validate(name: String) throws {
            try self.validate(self.baseLensVersion, name: "baseLensVersion", parent: name, max: 128)
            try self.validate(self.baseLensVersion, name: "baseLensVersion", parent: name, min: 1)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetLensVersionDifferenceOutput: AWSDecodableShape {
        /// The base version of the lens.
        public let baseLensVersion: String?
        /// The latest version of the lens.
        public let latestLensVersion: String?
        public let lensAlias: String?
        public let versionDifferences: VersionDifferences?

        public init(baseLensVersion: String? = nil, latestLensVersion: String? = nil, lensAlias: String? = nil, versionDifferences: VersionDifferences? = nil) {
            self.baseLensVersion = baseLensVersion
            self.latestLensVersion = latestLensVersion
            self.lensAlias = lensAlias
            self.versionDifferences = versionDifferences
        }

        private enum CodingKeys: String, CodingKey {
            case baseLensVersion = "BaseLensVersion"
            case latestLensVersion = "LatestLensVersion"
            case lensAlias = "LensAlias"
            case versionDifferences = "VersionDifferences"
        }
    }

    public struct GetMilestoneInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "milestoneNumber", location: .uri(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let milestoneNumber: Int
        public let workloadId: String

        public init(milestoneNumber: Int, workloadId: String) {
            self.milestoneNumber = milestoneNumber
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetMilestoneOutput: AWSDecodableShape {
        public let milestone: Milestone?
        public let workloadId: String?

        public init(milestone: Milestone? = nil, workloadId: String? = nil) {
            self.milestone = milestone
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case milestone = "Milestone"
            case workloadId = "WorkloadId"
        }
    }

    public struct GetWorkloadInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let workloadId: String

        public init(workloadId: String) {
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetWorkloadOutput: AWSDecodableShape {
        public let workload: Workload?

        public init(workload: Workload? = nil) {
            self.workload = workload
        }

        private enum CodingKeys: String, CodingKey {
            case workload = "Workload"
        }
    }

    public struct ImprovementSummary: AWSDecodableShape {
        public let improvementPlanUrl: String?
        public let pillarId: String?
        public let questionId: String?
        public let questionTitle: String?
        public let risk: Risk?

        public init(improvementPlanUrl: String? = nil, pillarId: String? = nil, questionId: String? = nil, questionTitle: String? = nil, risk: Risk? = nil) {
            self.improvementPlanUrl = improvementPlanUrl
            self.pillarId = pillarId
            self.questionId = questionId
            self.questionTitle = questionTitle
            self.risk = risk
        }

        private enum CodingKeys: String, CodingKey {
            case improvementPlanUrl = "ImprovementPlanUrl"
            case pillarId = "PillarId"
            case questionId = "QuestionId"
            case questionTitle = "QuestionTitle"
            case risk = "Risk"
        }
    }

    public struct LensReview: AWSDecodableShape {
        public let lensAlias: String?
        public let lensName: String?
        /// The status of the lens.
        public let lensStatus: LensStatus?
        /// The version of the lens.
        public let lensVersion: String?
        public let nextToken: String?
        public let notes: String?
        public let pillarReviewSummaries: [PillarReviewSummary]?
        public let riskCounts: [Risk: Int]?
        public let updatedAt: Date?

        public init(lensAlias: String? = nil, lensName: String? = nil, lensStatus: LensStatus? = nil, lensVersion: String? = nil, nextToken: String? = nil, notes: String? = nil, pillarReviewSummaries: [PillarReviewSummary]? = nil, riskCounts: [Risk: Int]? = nil, updatedAt: Date? = nil) {
            self.lensAlias = lensAlias
            self.lensName = lensName
            self.lensStatus = lensStatus
            self.lensVersion = lensVersion
            self.nextToken = nextToken
            self.notes = notes
            self.pillarReviewSummaries = pillarReviewSummaries
            self.riskCounts = riskCounts
            self.updatedAt = updatedAt
        }

        private enum CodingKeys: String, CodingKey {
            case lensAlias = "LensAlias"
            case lensName = "LensName"
            case lensStatus = "LensStatus"
            case lensVersion = "LensVersion"
            case nextToken = "NextToken"
            case notes = "Notes"
            case pillarReviewSummaries = "PillarReviewSummaries"
            case riskCounts = "RiskCounts"
            case updatedAt = "UpdatedAt"
        }
    }

    public struct LensReviewReport: AWSDecodableShape {
        public let base64String: String?
        public let lensAlias: String?

        public init(base64String: String? = nil, lensAlias: String? = nil) {
            self.base64String = base64String
            self.lensAlias = lensAlias
        }

        private enum CodingKeys: String, CodingKey {
            case base64String = "Base64String"
            case lensAlias = "LensAlias"
        }
    }

    public struct LensReviewSummary: AWSDecodableShape {
        public let lensAlias: String?
        public let lensName: String?
        /// The status of the lens.
        public let lensStatus: LensStatus?
        /// The version of the lens.
        public let lensVersion: String?
        public let riskCounts: [Risk: Int]?
        public let updatedAt: Date?

        public init(lensAlias: String? = nil, lensName: String? = nil, lensStatus: LensStatus? = nil, lensVersion: String? = nil, riskCounts: [Risk: Int]? = nil, updatedAt: Date? = nil) {
            self.lensAlias = lensAlias
            self.lensName = lensName
            self.lensStatus = lensStatus
            self.lensVersion = lensVersion
            self.riskCounts = riskCounts
            self.updatedAt = updatedAt
        }

        private enum CodingKeys: String, CodingKey {
            case lensAlias = "LensAlias"
            case lensName = "LensName"
            case lensStatus = "LensStatus"
            case lensVersion = "LensVersion"
            case riskCounts = "RiskCounts"
            case updatedAt = "UpdatedAt"
        }
    }

    public struct LensSummary: AWSDecodableShape {
        public let description: String?
        public let lensAlias: String?
        public let lensName: String?
        /// The version of the lens.
        public let lensVersion: String?

        public init(description: String? = nil, lensAlias: String? = nil, lensName: String? = nil, lensVersion: String? = nil) {
            self.description = description
            self.lensAlias = lensAlias
            self.lensName = lensName
            self.lensVersion = lensVersion
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case lensAlias = "LensAlias"
            case lensName = "LensName"
            case lensVersion = "LensVersion"
        }
    }

    public struct LensUpgradeSummary: AWSDecodableShape {
        /// The current version of the lens.
        public let currentLensVersion: String?
        /// The latest version of the lens.
        public let latestLensVersion: String?
        public let lensAlias: String?
        public let workloadId: String?
        public let workloadName: String?

        public init(currentLensVersion: String? = nil, latestLensVersion: String? = nil, lensAlias: String? = nil, workloadId: String? = nil, workloadName: String? = nil) {
            self.currentLensVersion = currentLensVersion
            self.latestLensVersion = latestLensVersion
            self.lensAlias = lensAlias
            self.workloadId = workloadId
            self.workloadName = workloadName
        }

        private enum CodingKeys: String, CodingKey {
            case currentLensVersion = "CurrentLensVersion"
            case latestLensVersion = "LatestLensVersion"
            case lensAlias = "LensAlias"
            case workloadId = "WorkloadId"
            case workloadName = "WorkloadName"
        }
    }

    public struct ListAnswersInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "MaxResults")),
            AWSMemberEncoding(label: "milestoneNumber", location: .querystring(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "NextToken")),
            AWSMemberEncoding(label: "pillarId", location: .querystring(locationName: "PillarId")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAlias: String
        /// The maximum number of results to return for this request.
        public let maxResults: Int?
        public let milestoneNumber: Int?
        public let nextToken: String?
        public let pillarId: String?
        public let workloadId: String

        public init(lensAlias: String, maxResults: Int? = nil, milestoneNumber: Int? = nil, nextToken: String? = nil, pillarId: String? = nil, workloadId: String) {
            self.lensAlias = lensAlias
            self.maxResults = maxResults
            self.milestoneNumber = milestoneNumber
            self.nextToken = nextToken
            self.pillarId = pillarId
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.pillarId, name: "pillarId", parent: name, max: 64)
            try self.validate(self.pillarId, name: "pillarId", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAnswersOutput: AWSDecodableShape {
        public let answerSummaries: [AnswerSummary]?
        public let lensAlias: String?
        public let milestoneNumber: Int?
        public let nextToken: String?
        public let workloadId: String?

        public init(answerSummaries: [AnswerSummary]? = nil, lensAlias: String? = nil, milestoneNumber: Int? = nil, nextToken: String? = nil, workloadId: String? = nil) {
            self.answerSummaries = answerSummaries
            self.lensAlias = lensAlias
            self.milestoneNumber = milestoneNumber
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case answerSummaries = "AnswerSummaries"
            case lensAlias = "LensAlias"
            case milestoneNumber = "MilestoneNumber"
            case nextToken = "NextToken"
            case workloadId = "WorkloadId"
        }
    }

    public struct ListLensReviewImprovementsInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "MaxResults")),
            AWSMemberEncoding(label: "milestoneNumber", location: .querystring(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "NextToken")),
            AWSMemberEncoding(label: "pillarId", location: .querystring(locationName: "PillarId")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAlias: String
        /// The maximum number of results to return for this request.
        public let maxResults: Int?
        public let milestoneNumber: Int?
        public let nextToken: String?
        public let pillarId: String?
        public let workloadId: String

        public init(lensAlias: String, maxResults: Int? = nil, milestoneNumber: Int? = nil, nextToken: String? = nil, pillarId: String? = nil, workloadId: String) {
            self.lensAlias = lensAlias
            self.maxResults = maxResults
            self.milestoneNumber = milestoneNumber
            self.nextToken = nextToken
            self.pillarId = pillarId
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 100)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.pillarId, name: "pillarId", parent: name, max: 64)
            try self.validate(self.pillarId, name: "pillarId", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListLensReviewImprovementsOutput: AWSDecodableShape {
        public let improvementSummaries: [ImprovementSummary]?
        public let lensAlias: String?
        public let milestoneNumber: Int?
        public let nextToken: String?
        public let workloadId: String?

        public init(improvementSummaries: [ImprovementSummary]? = nil, lensAlias: String? = nil, milestoneNumber: Int? = nil, nextToken: String? = nil, workloadId: String? = nil) {
            self.improvementSummaries = improvementSummaries
            self.lensAlias = lensAlias
            self.milestoneNumber = milestoneNumber
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case improvementSummaries = "ImprovementSummaries"
            case lensAlias = "LensAlias"
            case milestoneNumber = "MilestoneNumber"
            case nextToken = "NextToken"
            case workloadId = "WorkloadId"
        }
    }

    public struct ListLensReviewsInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "MaxResults")),
            AWSMemberEncoding(label: "milestoneNumber", location: .querystring(locationName: "MilestoneNumber")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "NextToken")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let maxResults: Int?
        public let milestoneNumber: Int?
        public let nextToken: String?
        public let workloadId: String

        public init(maxResults: Int? = nil, milestoneNumber: Int? = nil, nextToken: String? = nil, workloadId: String) {
            self.maxResults = maxResults
            self.milestoneNumber = milestoneNumber
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, max: 100)
            try self.validate(self.milestoneNumber, name: "milestoneNumber", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListLensReviewsOutput: AWSDecodableShape {
        public let lensReviewSummaries: [LensReviewSummary]?
        public let milestoneNumber: Int?
        public let nextToken: String?
        public let workloadId: String?

        public init(lensReviewSummaries: [LensReviewSummary]? = nil, milestoneNumber: Int? = nil, nextToken: String? = nil, workloadId: String? = nil) {
            self.lensReviewSummaries = lensReviewSummaries
            self.milestoneNumber = milestoneNumber
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case lensReviewSummaries = "LensReviewSummaries"
            case milestoneNumber = "MilestoneNumber"
            case nextToken = "NextToken"
            case workloadId = "WorkloadId"
        }
    }

    public struct ListLensesInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "MaxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "NextToken"))
        ]

        public let maxResults: Int?
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListLensesOutput: AWSDecodableShape {
        public let lensSummaries: [LensSummary]?
        public let nextToken: String?

        public init(lensSummaries: [LensSummary]? = nil, nextToken: String? = nil) {
            self.lensSummaries = lensSummaries
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case lensSummaries = "LensSummaries"
            case nextToken = "NextToken"
        }
    }

    public struct ListMilestonesInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let maxResults: Int?
        public let nextToken: String?
        public let workloadId: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, workloadId: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct ListMilestonesOutput: AWSDecodableShape {
        public let milestoneSummaries: [MilestoneSummary]?
        public let nextToken: String?
        public let workloadId: String?

        public init(milestoneSummaries: [MilestoneSummary]? = nil, nextToken: String? = nil, workloadId: String? = nil) {
            self.milestoneSummaries = milestoneSummaries
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case milestoneSummaries = "MilestoneSummaries"
            case nextToken = "NextToken"
            case workloadId = "WorkloadId"
        }
    }

    public struct ListNotificationsInput: AWSEncodableShape {
        /// The maximum number of results to return for this request.
        public let maxResults: Int?
        public let nextToken: String?
        public let workloadId: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil, workloadId: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case workloadId = "WorkloadId"
        }
    }

    public struct ListNotificationsOutput: AWSDecodableShape {
        public let nextToken: String?
        /// List of lens notification summaries in a workload.
        public let notificationSummaries: [NotificationSummary]?

        public init(nextToken: String? = nil, notificationSummaries: [NotificationSummary]? = nil) {
            self.nextToken = nextToken
            self.notificationSummaries = notificationSummaries
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case notificationSummaries = "NotificationSummaries"
        }
    }

    public struct ListShareInvitationsInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "MaxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "NextToken")),
            AWSMemberEncoding(label: "workloadNamePrefix", location: .querystring(locationName: "WorkloadNamePrefix"))
        ]

        /// The maximum number of results to return for this request.
        public let maxResults: Int?
        public let nextToken: String?
        public let workloadNamePrefix: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil, workloadNamePrefix: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.workloadNamePrefix = workloadNamePrefix
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.workloadNamePrefix, name: "workloadNamePrefix", parent: name, max: 100)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListShareInvitationsOutput: AWSDecodableShape {
        public let nextToken: String?
        /// List of share invitation summaries in a workload.
        public let shareInvitationSummaries: [ShareInvitationSummary]?

        public init(nextToken: String? = nil, shareInvitationSummaries: [ShareInvitationSummary]? = nil) {
            self.nextToken = nextToken
            self.shareInvitationSummaries = shareInvitationSummaries
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case shareInvitationSummaries = "ShareInvitationSummaries"
        }
    }

    public struct ListWorkloadSharesInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "MaxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "NextToken")),
            AWSMemberEncoding(label: "sharedWithPrefix", location: .querystring(locationName: "SharedWithPrefix")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        /// The maximum number of results to return for this request.
        public let maxResults: Int?
        public let nextToken: String?
        /// The AWS account ID or IAM role with which the workload is shared.
        public let sharedWithPrefix: String?
        public let workloadId: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, sharedWithPrefix: String? = nil, workloadId: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.sharedWithPrefix = sharedWithPrefix
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.sharedWithPrefix, name: "sharedWithPrefix", parent: name, max: 100)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListWorkloadSharesOutput: AWSDecodableShape {
        public let nextToken: String?
        public let workloadId: String?
        public let workloadShareSummaries: [WorkloadShareSummary]?

        public init(nextToken: String? = nil, workloadId: String? = nil, workloadShareSummaries: [WorkloadShareSummary]? = nil) {
            self.nextToken = nextToken
            self.workloadId = workloadId
            self.workloadShareSummaries = workloadShareSummaries
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case workloadId = "WorkloadId"
            case workloadShareSummaries = "WorkloadShareSummaries"
        }
    }

    public struct ListWorkloadsInput: AWSEncodableShape {
        /// The maximum number of results to return for this request.
        public let maxResults: Int?
        public let nextToken: String?
        public let workloadNamePrefix: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil, workloadNamePrefix: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.workloadNamePrefix = workloadNamePrefix
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.workloadNamePrefix, name: "workloadNamePrefix", parent: name, max: 100)
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case workloadNamePrefix = "WorkloadNamePrefix"
        }
    }

    public struct ListWorkloadsOutput: AWSDecodableShape {
        public let nextToken: String?
        public let workloadSummaries: [WorkloadSummary]?

        public init(nextToken: String? = nil, workloadSummaries: [WorkloadSummary]? = nil) {
            self.nextToken = nextToken
            self.workloadSummaries = workloadSummaries
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case workloadSummaries = "WorkloadSummaries"
        }
    }

    public struct Milestone: AWSDecodableShape {
        public let milestoneName: String?
        public let milestoneNumber: Int?
        public let recordedAt: Date?
        public let workload: Workload?

        public init(milestoneName: String? = nil, milestoneNumber: Int? = nil, recordedAt: Date? = nil, workload: Workload? = nil) {
            self.milestoneName = milestoneName
            self.milestoneNumber = milestoneNumber
            self.recordedAt = recordedAt
            self.workload = workload
        }

        private enum CodingKeys: String, CodingKey {
            case milestoneName = "MilestoneName"
            case milestoneNumber = "MilestoneNumber"
            case recordedAt = "RecordedAt"
            case workload = "Workload"
        }
    }

    public struct MilestoneSummary: AWSDecodableShape {
        public let milestoneName: String?
        public let milestoneNumber: Int?
        public let recordedAt: Date?
        public let workloadSummary: WorkloadSummary?

        public init(milestoneName: String? = nil, milestoneNumber: Int? = nil, recordedAt: Date? = nil, workloadSummary: WorkloadSummary? = nil) {
            self.milestoneName = milestoneName
            self.milestoneNumber = milestoneNumber
            self.recordedAt = recordedAt
            self.workloadSummary = workloadSummary
        }

        private enum CodingKeys: String, CodingKey {
            case milestoneName = "MilestoneName"
            case milestoneNumber = "MilestoneNumber"
            case recordedAt = "RecordedAt"
            case workloadSummary = "WorkloadSummary"
        }
    }

    public struct NotificationSummary: AWSDecodableShape {
        /// Summary of lens upgrade.
        public let lensUpgradeSummary: LensUpgradeSummary?
        /// The type of notification.
        public let type: NotificationType?

        public init(lensUpgradeSummary: LensUpgradeSummary? = nil, type: NotificationType? = nil) {
            self.lensUpgradeSummary = lensUpgradeSummary
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case lensUpgradeSummary = "LensUpgradeSummary"
            case type = "Type"
        }
    }

    public struct PillarDifference: AWSDecodableShape {
        /// Indicates the type of change to the pillar.
        public let differenceStatus: DifferenceStatus?
        public let pillarId: String?
        /// List of question differences.
        public let questionDifferences: [QuestionDifference]?

        public init(differenceStatus: DifferenceStatus? = nil, pillarId: String? = nil, questionDifferences: [QuestionDifference]? = nil) {
            self.differenceStatus = differenceStatus
            self.pillarId = pillarId
            self.questionDifferences = questionDifferences
        }

        private enum CodingKeys: String, CodingKey {
            case differenceStatus = "DifferenceStatus"
            case pillarId = "PillarId"
            case questionDifferences = "QuestionDifferences"
        }
    }

    public struct PillarReviewSummary: AWSDecodableShape {
        public let notes: String?
        public let pillarId: String?
        public let pillarName: String?
        public let riskCounts: [Risk: Int]?

        public init(notes: String? = nil, pillarId: String? = nil, pillarName: String? = nil, riskCounts: [Risk: Int]? = nil) {
            self.notes = notes
            self.pillarId = pillarId
            self.pillarName = pillarName
            self.riskCounts = riskCounts
        }

        private enum CodingKeys: String, CodingKey {
            case notes = "Notes"
            case pillarId = "PillarId"
            case pillarName = "PillarName"
            case riskCounts = "RiskCounts"
        }
    }

    public struct QuestionDifference: AWSDecodableShape {
        /// Indicates the type of change to the question.
        public let differenceStatus: DifferenceStatus?
        public let questionId: String?
        public let questionTitle: String?

        public init(differenceStatus: DifferenceStatus? = nil, questionId: String? = nil, questionTitle: String? = nil) {
            self.differenceStatus = differenceStatus
            self.questionId = questionId
            self.questionTitle = questionTitle
        }

        private enum CodingKeys: String, CodingKey {
            case differenceStatus = "DifferenceStatus"
            case questionId = "QuestionId"
            case questionTitle = "QuestionTitle"
        }
    }

    public struct ShareInvitation: AWSDecodableShape {
        /// The ID assigned to the share invitation.
        public let shareInvitationId: String?
        public let workloadId: String?

        public init(shareInvitationId: String? = nil, workloadId: String? = nil) {
            self.shareInvitationId = shareInvitationId
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case shareInvitationId = "ShareInvitationId"
            case workloadId = "WorkloadId"
        }
    }

    public struct ShareInvitationSummary: AWSDecodableShape {
        public let permissionType: PermissionType?
        public let sharedBy: String?
        public let sharedWith: String?
        /// The ID assigned to the share invitation.
        public let shareInvitationId: String?
        public let workloadId: String?
        public let workloadName: String?

        public init(permissionType: PermissionType? = nil, sharedBy: String? = nil, sharedWith: String? = nil, shareInvitationId: String? = nil, workloadId: String? = nil, workloadName: String? = nil) {
            self.permissionType = permissionType
            self.sharedBy = sharedBy
            self.sharedWith = sharedWith
            self.shareInvitationId = shareInvitationId
            self.workloadId = workloadId
            self.workloadName = workloadName
        }

        private enum CodingKeys: String, CodingKey {
            case permissionType = "PermissionType"
            case sharedBy = "SharedBy"
            case sharedWith = "SharedWith"
            case shareInvitationId = "ShareInvitationId"
            case workloadId = "WorkloadId"
            case workloadName = "WorkloadName"
        }
    }

    public struct UpdateAnswerInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "questionId", location: .uri(locationName: "QuestionId")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let isApplicable: Bool?
        public let lensAlias: String
        public let notes: String?
        public let questionId: String
        public let selectedChoices: [String]?
        public let workloadId: String

        public init(isApplicable: Bool? = nil, lensAlias: String, notes: String? = nil, questionId: String, selectedChoices: [String]? = nil, workloadId: String) {
            self.isApplicable = isApplicable
            self.lensAlias = lensAlias
            self.notes = notes
            self.questionId = questionId
            self.selectedChoices = selectedChoices
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.notes, name: "notes", parent: name, max: 2084)
            try self.validate(self.questionId, name: "questionId", parent: name, max: 128)
            try self.validate(self.questionId, name: "questionId", parent: name, min: 1)
            try self.selectedChoices?.forEach {
                try validate($0, name: "selectedChoices[]", parent: name, max: 64)
                try validate($0, name: "selectedChoices[]", parent: name, min: 1)
            }
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case isApplicable = "IsApplicable"
            case notes = "Notes"
            case selectedChoices = "SelectedChoices"
        }
    }

    public struct UpdateAnswerOutput: AWSDecodableShape {
        public let answer: Answer?
        public let lensAlias: String?
        public let workloadId: String?

        public init(answer: Answer? = nil, lensAlias: String? = nil, workloadId: String? = nil) {
            self.answer = answer
            self.lensAlias = lensAlias
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case answer = "Answer"
            case lensAlias = "LensAlias"
            case workloadId = "WorkloadId"
        }
    }

    public struct UpdateLensReviewInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let lensAlias: String
        public let lensNotes: String?
        public let pillarNotes: [String: String]?
        public let workloadId: String

        public init(lensAlias: String, lensNotes: String? = nil, pillarNotes: [String: String]? = nil, workloadId: String) {
            self.lensAlias = lensAlias
            self.lensNotes = lensNotes
            self.pillarNotes = pillarNotes
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.lensNotes, name: "lensNotes", parent: name, max: 2084)
            try self.pillarNotes?.forEach {
                try validate($0.key, name: "pillarNotes.key", parent: name, max: 64)
                try validate($0.key, name: "pillarNotes.key", parent: name, min: 1)
                try validate($0.value, name: "pillarNotes[\"\($0.key)\"]", parent: name, max: 2084)
            }
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case lensNotes = "LensNotes"
            case pillarNotes = "PillarNotes"
        }
    }

    public struct UpdateLensReviewOutput: AWSDecodableShape {
        public let lensReview: LensReview?
        public let workloadId: String?

        public init(lensReview: LensReview? = nil, workloadId: String? = nil) {
            self.lensReview = lensReview
            self.workloadId = workloadId
        }

        private enum CodingKeys: String, CodingKey {
            case lensReview = "LensReview"
            case workloadId = "WorkloadId"
        }
    }

    public struct UpdateShareInvitationInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "shareInvitationId", location: .uri(locationName: "ShareInvitationId"))
        ]

        public let shareInvitationAction: ShareInvitationAction
        /// The ID assigned to the share invitation.
        public let shareInvitationId: String

        public init(shareInvitationAction: ShareInvitationAction, shareInvitationId: String) {
            self.shareInvitationAction = shareInvitationAction
            self.shareInvitationId = shareInvitationId
        }

        public func validate(name: String) throws {
            try self.validate(self.shareInvitationId, name: "shareInvitationId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case shareInvitationAction = "ShareInvitationAction"
        }
    }

    public struct UpdateShareInvitationOutput: AWSDecodableShape {
        /// The updated workload share invitation.
        public let shareInvitation: ShareInvitation?

        public init(shareInvitation: ShareInvitation? = nil) {
            self.shareInvitation = shareInvitation
        }

        private enum CodingKeys: String, CodingKey {
            case shareInvitation = "ShareInvitation"
        }
    }

    public struct UpdateWorkloadInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let accountIds: [String]?
        public let architecturalDesign: String?
        public let awsRegions: [String]?
        public let description: String?
        public let environment: WorkloadEnvironment?
        public let improvementStatus: WorkloadImprovementStatus?
        public let industry: String?
        public let industryType: String?
        /// Flag indicating whether the workload owner has acknowledged that the Review owner field is required. If a Review owner is not added to the workload within 60 days of acknowledgement, access to the workload is restricted until an owner is added.
        public let isReviewOwnerUpdateAcknowledged: Bool?
        public let nonAwsRegions: [String]?
        public let notes: String?
        public let pillarPriorities: [String]?
        public let reviewOwner: String?
        public let workloadId: String
        public let workloadName: String?

        public init(accountIds: [String]? = nil, architecturalDesign: String? = nil, awsRegions: [String]? = nil, description: String? = nil, environment: WorkloadEnvironment? = nil, improvementStatus: WorkloadImprovementStatus? = nil, industry: String? = nil, industryType: String? = nil, isReviewOwnerUpdateAcknowledged: Bool? = nil, nonAwsRegions: [String]? = nil, notes: String? = nil, pillarPriorities: [String]? = nil, reviewOwner: String? = nil, workloadId: String, workloadName: String? = nil) {
            self.accountIds = accountIds
            self.architecturalDesign = architecturalDesign
            self.awsRegions = awsRegions
            self.description = description
            self.environment = environment
            self.improvementStatus = improvementStatus
            self.industry = industry
            self.industryType = industryType
            self.isReviewOwnerUpdateAcknowledged = isReviewOwnerUpdateAcknowledged
            self.nonAwsRegions = nonAwsRegions
            self.notes = notes
            self.pillarPriorities = pillarPriorities
            self.reviewOwner = reviewOwner
            self.workloadId = workloadId
            self.workloadName = workloadName
        }

        public func validate(name: String) throws {
            try self.accountIds?.forEach {
                try validate($0, name: "accountIds[]", parent: name, pattern: "[0-9]{12}")
            }
            try self.validate(self.accountIds, name: "accountIds", parent: name, max: 100)
            try self.validate(self.architecturalDesign, name: "architecturalDesign", parent: name, max: 2048)
            try self.awsRegions?.forEach {
                try validate($0, name: "awsRegions[]", parent: name, max: 100)
            }
            try self.validate(self.awsRegions, name: "awsRegions", parent: name, max: 50)
            try self.validate(self.description, name: "description", parent: name, max: 250)
            try self.validate(self.description, name: "description", parent: name, min: 3)
            try self.validate(self.industry, name: "industry", parent: name, max: 100)
            try self.validate(self.industryType, name: "industryType", parent: name, max: 100)
            try self.nonAwsRegions?.forEach {
                try validate($0, name: "nonAwsRegions[]", parent: name, max: 25)
                try validate($0, name: "nonAwsRegions[]", parent: name, min: 3)
            }
            try self.validate(self.nonAwsRegions, name: "nonAwsRegions", parent: name, max: 5)
            try self.validate(self.notes, name: "notes", parent: name, max: 2084)
            try self.pillarPriorities?.forEach {
                try validate($0, name: "pillarPriorities[]", parent: name, max: 64)
                try validate($0, name: "pillarPriorities[]", parent: name, min: 1)
            }
            try self.validate(self.reviewOwner, name: "reviewOwner", parent: name, max: 255)
            try self.validate(self.reviewOwner, name: "reviewOwner", parent: name, min: 3)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
            try self.validate(self.workloadName, name: "workloadName", parent: name, max: 100)
            try self.validate(self.workloadName, name: "workloadName", parent: name, min: 3)
        }

        private enum CodingKeys: String, CodingKey {
            case accountIds = "AccountIds"
            case architecturalDesign = "ArchitecturalDesign"
            case awsRegions = "AwsRegions"
            case description = "Description"
            case environment = "Environment"
            case improvementStatus = "ImprovementStatus"
            case industry = "Industry"
            case industryType = "IndustryType"
            case isReviewOwnerUpdateAcknowledged = "IsReviewOwnerUpdateAcknowledged"
            case nonAwsRegions = "NonAwsRegions"
            case notes = "Notes"
            case pillarPriorities = "PillarPriorities"
            case reviewOwner = "ReviewOwner"
            case workloadName = "WorkloadName"
        }
    }

    public struct UpdateWorkloadOutput: AWSDecodableShape {
        public let workload: Workload?

        public init(workload: Workload? = nil) {
            self.workload = workload
        }

        private enum CodingKeys: String, CodingKey {
            case workload = "Workload"
        }
    }

    public struct UpdateWorkloadShareInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "shareId", location: .uri(locationName: "ShareId")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let permissionType: PermissionType
        public let shareId: String
        public let workloadId: String

        public init(permissionType: PermissionType, shareId: String, workloadId: String) {
            self.permissionType = permissionType
            self.shareId = shareId
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.shareId, name: "shareId", parent: name, pattern: "[0-9a-f]{32}")
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case permissionType = "PermissionType"
        }
    }

    public struct UpdateWorkloadShareOutput: AWSDecodableShape {
        public let workloadId: String?
        public let workloadShare: WorkloadShare?

        public init(workloadId: String? = nil, workloadShare: WorkloadShare? = nil) {
            self.workloadId = workloadId
            self.workloadShare = workloadShare
        }

        private enum CodingKeys: String, CodingKey {
            case workloadId = "WorkloadId"
            case workloadShare = "WorkloadShare"
        }
    }

    public struct UpgradeLensReviewInput: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "lensAlias", location: .uri(locationName: "LensAlias")),
            AWSMemberEncoding(label: "workloadId", location: .uri(locationName: "WorkloadId"))
        ]

        public let clientRequestToken: String?
        public let lensAlias: String
        public let milestoneName: String
        public let workloadId: String

        public init(clientRequestToken: String? = nil, lensAlias: String, milestoneName: String, workloadId: String) {
            self.clientRequestToken = clientRequestToken
            self.lensAlias = lensAlias
            self.milestoneName = milestoneName
            self.workloadId = workloadId
        }

        public func validate(name: String) throws {
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, max: 64)
            try self.validate(self.lensAlias, name: "lensAlias", parent: name, min: 1)
            try self.validate(self.milestoneName, name: "milestoneName", parent: name, max: 100)
            try self.validate(self.milestoneName, name: "milestoneName", parent: name, min: 3)
            try self.validate(self.workloadId, name: "workloadId", parent: name, pattern: "[0-9a-f]{32}")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case milestoneName = "MilestoneName"
        }
    }

    public struct VersionDifferences: AWSDecodableShape {
        /// The differences between the base and latest versions of the lens.
        public let pillarDifferences: [PillarDifference]?

        public init(pillarDifferences: [PillarDifference]? = nil) {
            self.pillarDifferences = pillarDifferences
        }

        private enum CodingKeys: String, CodingKey {
            case pillarDifferences = "PillarDifferences"
        }
    }

    public struct Workload: AWSDecodableShape {
        public let accountIds: [String]?
        public let architecturalDesign: String?
        public let awsRegions: [String]?
        public let description: String?
        public let environment: WorkloadEnvironment?
        public let improvementStatus: WorkloadImprovementStatus?
        public let industry: String?
        public let industryType: String?
        /// Flag indicating whether the workload owner has acknowledged that the Review owner field is required. If a Review owner is not added to the workload within 60 days of acknowledgement, access to the workload is restricted until an owner is added.
        public let isReviewOwnerUpdateAcknowledged: Bool?
        public let lenses: [String]?
        public let nonAwsRegions: [String]?
        public let notes: String?
        public let owner: String?
        public let pillarPriorities: [String]?
        public let reviewOwner: String?
        public let reviewRestrictionDate: Date?
        public let riskCounts: [Risk: Int]?
        /// The ID assigned to the share invitation.
        public let shareInvitationId: String?
        public let updatedAt: Date?
        public let workloadArn: String?
        public let workloadId: String?
        public let workloadName: String?

        public init(accountIds: [String]? = nil, architecturalDesign: String? = nil, awsRegions: [String]? = nil, description: String? = nil, environment: WorkloadEnvironment? = nil, improvementStatus: WorkloadImprovementStatus? = nil, industry: String? = nil, industryType: String? = nil, isReviewOwnerUpdateAcknowledged: Bool? = nil, lenses: [String]? = nil, nonAwsRegions: [String]? = nil, notes: String? = nil, owner: String? = nil, pillarPriorities: [String]? = nil, reviewOwner: String? = nil, reviewRestrictionDate: Date? = nil, riskCounts: [Risk: Int]? = nil, shareInvitationId: String? = nil, updatedAt: Date? = nil, workloadArn: String? = nil, workloadId: String? = nil, workloadName: String? = nil) {
            self.accountIds = accountIds
            self.architecturalDesign = architecturalDesign
            self.awsRegions = awsRegions
            self.description = description
            self.environment = environment
            self.improvementStatus = improvementStatus
            self.industry = industry
            self.industryType = industryType
            self.isReviewOwnerUpdateAcknowledged = isReviewOwnerUpdateAcknowledged
            self.lenses = lenses
            self.nonAwsRegions = nonAwsRegions
            self.notes = notes
            self.owner = owner
            self.pillarPriorities = pillarPriorities
            self.reviewOwner = reviewOwner
            self.reviewRestrictionDate = reviewRestrictionDate
            self.riskCounts = riskCounts
            self.shareInvitationId = shareInvitationId
            self.updatedAt = updatedAt
            self.workloadArn = workloadArn
            self.workloadId = workloadId
            self.workloadName = workloadName
        }

        private enum CodingKeys: String, CodingKey {
            case accountIds = "AccountIds"
            case architecturalDesign = "ArchitecturalDesign"
            case awsRegions = "AwsRegions"
            case description = "Description"
            case environment = "Environment"
            case improvementStatus = "ImprovementStatus"
            case industry = "Industry"
            case industryType = "IndustryType"
            case isReviewOwnerUpdateAcknowledged = "IsReviewOwnerUpdateAcknowledged"
            case lenses = "Lenses"
            case nonAwsRegions = "NonAwsRegions"
            case notes = "Notes"
            case owner = "Owner"
            case pillarPriorities = "PillarPriorities"
            case reviewOwner = "ReviewOwner"
            case reviewRestrictionDate = "ReviewRestrictionDate"
            case riskCounts = "RiskCounts"
            case shareInvitationId = "ShareInvitationId"
            case updatedAt = "UpdatedAt"
            case workloadArn = "WorkloadArn"
            case workloadId = "WorkloadId"
            case workloadName = "WorkloadName"
        }
    }

    public struct WorkloadShare: AWSDecodableShape {
        public let permissionType: PermissionType?
        public let sharedBy: String?
        public let sharedWith: String?
        public let shareId: String?
        public let status: ShareStatus?
        public let workloadId: String?
        public let workloadName: String?

        public init(permissionType: PermissionType? = nil, sharedBy: String? = nil, sharedWith: String? = nil, shareId: String? = nil, status: ShareStatus? = nil, workloadId: String? = nil, workloadName: String? = nil) {
            self.permissionType = permissionType
            self.sharedBy = sharedBy
            self.sharedWith = sharedWith
            self.shareId = shareId
            self.status = status
            self.workloadId = workloadId
            self.workloadName = workloadName
        }

        private enum CodingKeys: String, CodingKey {
            case permissionType = "PermissionType"
            case sharedBy = "SharedBy"
            case sharedWith = "SharedWith"
            case shareId = "ShareId"
            case status = "Status"
            case workloadId = "WorkloadId"
            case workloadName = "WorkloadName"
        }
    }

    public struct WorkloadShareSummary: AWSDecodableShape {
        public let permissionType: PermissionType?
        public let sharedWith: String?
        public let shareId: String?
        public let status: ShareStatus?

        public init(permissionType: PermissionType? = nil, sharedWith: String? = nil, shareId: String? = nil, status: ShareStatus? = nil) {
            self.permissionType = permissionType
            self.sharedWith = sharedWith
            self.shareId = shareId
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case permissionType = "PermissionType"
            case sharedWith = "SharedWith"
            case shareId = "ShareId"
            case status = "Status"
        }
    }

    public struct WorkloadSummary: AWSDecodableShape {
        public let improvementStatus: WorkloadImprovementStatus?
        public let lenses: [String]?
        public let owner: String?
        public let riskCounts: [Risk: Int]?
        public let updatedAt: Date?
        public let workloadArn: String?
        public let workloadId: String?
        public let workloadName: String?

        public init(improvementStatus: WorkloadImprovementStatus? = nil, lenses: [String]? = nil, owner: String? = nil, riskCounts: [Risk: Int]? = nil, updatedAt: Date? = nil, workloadArn: String? = nil, workloadId: String? = nil, workloadName: String? = nil) {
            self.improvementStatus = improvementStatus
            self.lenses = lenses
            self.owner = owner
            self.riskCounts = riskCounts
            self.updatedAt = updatedAt
            self.workloadArn = workloadArn
            self.workloadId = workloadId
            self.workloadName = workloadName
        }

        private enum CodingKeys: String, CodingKey {
            case improvementStatus = "ImprovementStatus"
            case lenses = "Lenses"
            case owner = "Owner"
            case riskCounts = "RiskCounts"
            case updatedAt = "UpdatedAt"
            case workloadArn = "WorkloadArn"
            case workloadId = "WorkloadId"
            case workloadName = "WorkloadName"
        }
    }
}
